package state;

/**
 * 定义个MM
 * 动作
 * 哭
 * 笑
 *
 * 状态会影响 动作
 * 开心
 * 悲伤
 *
 * 在状态不同的情况下动作含义也不同的。
 *
 * 要是不分离需要在
 * 哭
 * 笑
 * 的动作里面根据状态去做处理
 */


/**
 * 状态对应的动作
 */
abstract class MMState{
    abstract void laugh();
    abstract void cry();
}

class MM{
    private MMState mmState;

    MM(MMState mmState){
        this.mmState = mmState;
    }
    void laugh(){
        mmState.laugh();
    }
    void cry(){
        mmState.cry();
    }
}

/**
 * 创建状态
 */
class Happy extends MMState{

    @Override
    void laugh() {
        System.out.println("开心的笑");
    }

    @Override
    void cry() {
        System.out.println("开心的哭");
    }
}

public class State {
    public static void main(String[] args) {
        System.out.println("state");

        MM mm = new MM(new Happy());
        mm.cry();
        mm.laugh();
    }
}
